home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d1
/
dosdev.arc
/
TXSTK.C
< prev
next >
Wrap
Text File
|
1985-09-16
|
2KB
|
88 lines
/* Listing 4 - Test of STKDEV using standard I/O calls */
#include "stdio.h"
main() /* txstk.c - test XSTK device */
{struct {int scs,sss,sds,ses; } sregs;
struct {int ax,bx,cx,dx,si,di,ds,es; } callregs, retregs;
int n, handle, flags;
int setrecsize, chkrecsize;
char *dev = "XSTK";
char *outstr = "Hello";
char *instr;
segread(&sregs); /* sregs.sds = current ds */
callregs.ds = sregs.sds;
/* open XSTK in rw mode */
callregs.ax = 0x3D02;
callregs.dx = dev;
flags = sysint21(&callregs,&retregs);
if(flags & 1) printf("Open error %d\n",retregs.ax);
else handle = retregs.ax;
/* write outstr to XSTK one byte at a time */
callregs.ax = 0x4000;
callregs.cx = 5;
callregs.bx = handle;
callregs.dx = &outstr[0];
flags = sysint21(&callregs,&retregs);
if(flags & 1) printf("Write error %d on char %d\n",retregs.ax,n);
/* read outstr from XSTK one byte at a time */
callregs.ax = 0x3F00;
callregs.cx = 5;
callregs.bx = handle;
callregs.dx = &instr[0];
flags = sysint21(&callregs,&retregs);
if(flags & 1) printf("Read error %d on char %d\n",retregs.ax,n);
else puts(instr);
/* change XSTK record size to 5 bytes with IOCTL calls */
setrecsize = 5;
callregs.ax = 0x4403; /* set rec size */
callregs.cx = 2;
callregs.bx = handle;
callregs.dx = &setrecsize;
flags = sysint21(&callregs,&retregs);
callregs.ax = 0x4402; /* read rec size from XSTK */
callregs.cx = 2;
callregs.bx = handle;
callregs.dx = &chkrecsize;
flags = sysint21(&callregs,&retregs);
printf("XSTK record size reset to %d bytes\n",chkrecsize);
/* write outstr to XSTK as a 5-byte record */
callregs.ax = 0x4000;
callregs.cx = 5;
callregs.bx = handle;
callregs.dx = &outstr[0];
flags = sysint21(&callregs,&retregs);
if(flags & 1) printf("Write error %d on char %d\n",retregs.ax,n);
/* read outstr from XSTK as a record */
callregs.ax = 0x3F00;
callregs.cx = 5;
callregs.bx = handle;
callregs.dx = &instr[0];
flags = sysint21(&callregs,&retregs);
if(flags & 1) printf("Read error %d on char %d\n",retregs.ax,n);
else puts(instr);
} /* end txstk */
&retregs);
if(flags & 1) printf("Read error %d on char %d\n",retregs.ax,n);
else puts(instr);